using System; using System.Collections.Generic; using System.Threading; namespace Shared.SimpleControl.Phone { public class UserDeviceToCurtains : FrameLayout { /// /// 当前界面 /// static UserDeviceToCurtains curView; VerticalScrolViewLayout equipmentListScrolView; public static void UpdateBrighingCount () { #region 更新用户主界面窗帘点亮总数 int brighingCount = 0; foreach (var room in Room.Lists) { if (room == null || string.IsNullOrEmpty (room.Name)) { continue; } foreach (var light in room.DeviceList) { if (light.Type == DeviceType.CurtainModel) { if ((light as CurtainModel).Status == CurtainStatus.Open) brighingCount++; } else if (light.Type == DeviceType.CurtainRoller) { if ((light as CurtainRoller).CurtainProress >0) brighingCount++; } else if (light.Type == DeviceType.CurtainTrietex) { if ((light as CurtainTrietex).CurtainProress > 0) brighingCount++; } } } if (UserDeviceView.CurtainCount != brighingCount) { Console.WriteLine ($"UserDeviceView.CurtainCount : { UserDeviceView.CurtainCount}"); UserDeviceView.UpdataDeviceCountNumber (brighingCount, R.MyInternationalizationString.Curtain); } #endregion } static System.Threading.Thread thread; /// /// 读取设备状态 /// public static void readAllStatus (bool isRead = false) { List list = new List (); foreach (Room room in Room.Lists) { if (room == null) { continue; } list.AddRange(room.DeviceList.FindAll ((obj) => { return (obj.Type == DeviceType.CurtainModel || obj.Type == DeviceType.CurtainRoller || obj.Type == DeviceType.CurtainTrietex); })); } if (isRead) { foreach (Common common in list) { common.LastUpdateTime = DateTime.MinValue; } } if (thread != null) { thread.Abort (); } thread = new Thread (() => { try { List readList = new List (); foreach (Common common in list) { var s = common.Type + "_" + common.SubnetID + "_" + common.DeviceID; //已经读取过当前设备就不再读取 if (readList.Contains (s)) { continue; } readList.Add (s); Thread.Sleep (500); if (common.Type == DeviceType.CurtainModel) { Control.ControlBytesSend (Command.ReadCurtainStatus, common.SubnetID, common.DeviceID, new byte [] { common.LoopID }); } else { Control.ControlBytesSend (Command.ReadCurtainStatus, common.SubnetID, common.DeviceID, new byte [] { 17 }); } } } catch { } finally { thread = null; } }); thread.Start (); } public static void UpdateStata (Common curtain) { Application.RunOnMainThread (() => { UpdateBrighingCount (); if (curView == null) { return; } for (int i = 0; i < curView.equipmentListScrolView.ChildrenCount; i++) { if (curView.equipmentListScrolView.GetChildren (i).GetType () == typeof (FrameLayout)) { var curtainRow = (FrameLayout)curView.equipmentListScrolView.GetChildren (i); var o = curtainRow.Tag; if (o != null && o.ToString () == curtain.CommonLoopID.ToString ()) { for (int j = 0; j < curtainRow.ChildrenCount; j++) { if (curtainRow.GetChildren (j).GetType () == typeof (Button)) { var btn = (Button)curtainRow.GetChildren (j); btn.IsSelected = false; if (btn.Tag != null) { var btnTag = btn.Tag.ToString (); if (curtain.obj5 == 1) {//curtain.obj5 == 0 || if (btnTag == "Open") { btn.IsSelected = true; } } else if(curtain.obj5 == 2) { if (btnTag == "Close") { btn.IsSelected = true; } } else { if (btnTag == "Stop") { btn.IsSelected = true; } } } } } } } } }); } /// ///构造函数 /// public UserDeviceToCurtains () { BackgroundColor = SkinStyle.Current.MainColor; } /// /// 通过设备类型方式选择设备 /// public void showAllRoomCurtain () { #region 标题 var topView = new FrameLayout () { Y = Application.GetRealHeight (36), Height = Application.GetRealHeight (90), }; AddChidren (topView); var title = new Button () { TextAlignment = TextAlignment.Center, Text = Language.StringByID (R.MyInternationalizationString.Curtains), TextSize = 19, TextColor = SkinStyle.Current.TextColor1 }; topView.AddChidren (title); var logo = new Button () { Width = Application.GetRealWidth (154), Height = Application.GetRealHeight (90), X = Application.GetRealWidth (486), UnSelectedImagePath = MainPage.LogoString, }; topView.AddChidren (logo); var back = new Button () { Height = Application.GetRealHeight (90), Width = Application.GetRealWidth (85), UnSelectedImagePath = "Item/Back.png", SelectedImagePath = "Item/BackSelected.png", }; topView.AddChidren (back); back.MouseUpEventHandler += (sender, e) => { (Parent as PageLayout).PageIndex -= 1; curView = null; }; #endregion #region 全开-全关 var powerView = new FrameLayout () { Height = Application.GetRealHeight (110), BackgroundColor = SkinStyle.Current.TitileView, Y = topView.Bottom }; AddChidren (powerView); var btnAllON = new Button () { Width = Application.GetRealWidth (320), TextSize = 16, TextID = R.MyInternationalizationString.ALLON, TextColor = SkinStyle.Current.TextColor1, }; powerView.AddChidren (btnAllON); var btnAllOff = new Button () { Width = Application.GetRealWidth (320), X = btnAllON.Right, TextSize = 16, TextID = R.MyInternationalizationString.ALLOFF, TextColor = SkinStyle.Current.TextColor1 }; var btnLine = new Button () { Width = 1, BackgroundColor = SkinStyle.Current.White20Transparent, X = btnAllON.Right, }; powerView.AddChidren (btnLine); btnAllON.MouseUpEventHandler += (sender, e) => { btnAllON.TextColor = SkinStyle.Current.SelectedColor; btnAllOff.TextColor = SkinStyle.Current.TextColor1; Alert alert = new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.SureOpenAllCurtian), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim)); alert.Show (); alert.ResultEventHandler += (sender2, e2) => { if (e2) { controlAllCurtain (1); } }; }; powerView.AddChidren (btnAllOff); btnAllOff.MouseUpEventHandler += (sender, e) => { btnAllON.TextColor = SkinStyle.Current.TextColor1; btnAllOff.TextColor = SkinStyle.Current.SelectedColor; Alert alert = new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.SureCloseAllCurtian), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim)); alert.Show (); alert.ResultEventHandler += (sender2, e2) => { if (e2) { controlAllCurtain (2); } }; }; #endregion equipmentListScrolView = new VerticalScrolViewLayout () { Width = LayoutParams.MatchParent, Height = Application.GetRealHeight (Application.DesignHeight - 126 - 110), Y = powerView.Bottom, BackgroundColor = SkinStyle.Current.ViewColor }; AddChidren (equipmentListScrolView); #region 显示全部的窗帘 //显示出所有的窗帘 foreach (var room in Room.Lists) { if (string.IsNullOrEmpty(room.Name)) { continue; } foreach (var common in room.DeviceList) { if (common.Type == DeviceType.CurtainModel) { var curtainmodel = common as CurtainModel; EventHandler openCurtainControlPageEvent = (button, mouseEventArgs) => { var userCurtainPageView = new UserCurtainPage (curtainmodel, room); UserMiddle.DevicePageView.AddChidren (userCurtainPageView); UserMiddle.DevicePageView.PageIndex = 2; userCurtainPageView.showCurtainsRoom (); }; var curtainView = new FrameLayout () { Height = Application.GetRealHeight (130), Tag = common.CommonLoopID.ToString() }; equipmentListScrolView.AddChidren (curtainView); curtainView.MouseUpEventHandler += openCurtainControlPageEvent; Button btnCurtainViewBottomNull = new Button () { Y = Application.GetRealHeight (127), Height = Application.GetRealHeight (3), SelectedBackgroundColor = SkinStyle.Current.MainColor, BackgroundColor = SkinStyle.Current.MainColor, }; curtainView.AddChidren (btnCurtainViewBottomNull); //窗名 var tempDeviceName = new Button () { X = Application.GetRealWidth (30), Height = Application.GetRealHeight (60), TextAlignment = TextAlignment.CenterLeft, Text = room.Name + "-" + curtainmodel.Name, TextColor = SkinStyle.Current.TextColor1, }; curtainView.AddChidren (tempDeviceName); tempDeviceName.MouseUpEventHandler += openCurtainControlPageEvent; Button btnCurtain = new Button () { X = Application.GetRealWidth (20), Y = Application.GetRealHeight (40), Width = Application.GetMinRealAverage (105), Height = Application.GetMinRealAverage (105), UnSelectedImagePath = "Curtain/curtain1.png", //SelectedImagePath = "Item/RH_CurtainsSelected.png", }; curtainView.AddChidren (btnCurtain); btnCurtain.MouseUpEventHandler += openCurtainControlPageEvent; var btnOpenCurtain = new Button () { Width = Application.GetMinRealAverage (100), Height = Application.GetMinRealAverage (100), X = Application.GetRealWidth (280), Y = Application.GetRealHeight (35), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Curtain/CurtainOpen.png", SelectedImagePath = "Curtain/CurtainOpenSelected.png", Tag = "Open" }; curtainView.AddChidren (btnOpenCurtain); var btnStopCurtain = new Button () { Width = Application.GetMinRealAverage (100), Height = Application.GetMinRealAverage (100), X = Application.GetRealWidth (400), Y = Application.GetRealHeight (35), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Curtain/CurtainTimeOut.png", SelectedImagePath = "Curtain/CurtainTimeOutSelected.png", Tag = "Stop" }; curtainView.AddChidren (btnStopCurtain); var btnCloseCurtain = new Button () { Width = Application.GetMinRealAverage (100), Height = Application.GetMinRealAverage (100), X = Application.GetRealWidth (520), Y = Application.GetRealHeight (35), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Curtain/CurtainClose.png", SelectedImagePath = "Curtain/CurtainCloseSelected.png", Tag = "Close" }; curtainView.AddChidren (btnCloseCurtain); if(curtainmodel.Status == CurtainStatus.Close) { btnCloseCurtain.IsSelected = true; } else if (curtainmodel.Status == CurtainStatus.Open) { btnOpenCurtain.IsSelected = true; } btnCloseCurtain.MouseDownEventHandler += (sender3, e3) => { Control.ControlBytesSend (Command.UpdataCurtainModelStutas, curtainmodel.SubnetID, curtainmodel.DeviceID, new byte [] { curtainmodel.LoopID, 2 }); (sender3 as Button).IsSelected = true; btnOpenCurtain.IsSelected = false; btnStopCurtain.IsSelected = false; }; btnOpenCurtain.MouseDownEventHandler += (sender3, e3) => { Control.ControlBytesSend (Command.UpdataCurtainModelStutas, curtainmodel.SubnetID, curtainmodel.DeviceID, new byte [] { curtainmodel.LoopID, 1 }); (sender3 as Button).IsSelected = true; btnCloseCurtain.IsSelected = false; btnStopCurtain.IsSelected = false; }; btnStopCurtain.MouseDownEventHandler += (sender3, e3) => { Control.ControlBytesSend (Command.UpdataCurtainModelStutas, curtainmodel.SubnetID, curtainmodel.DeviceID, new byte [] { curtainmodel.LoopID, 0 }); (sender3 as Button).IsSelected = true; btnCloseCurtain.IsSelected = false; btnOpenCurtain.IsSelected = false; new System.Threading.Thread (() => { System.Threading.Thread.Sleep (300); Application.RunOnMainThread (() => { (sender3 as Button).IsSelected = false; btnOpenCurtain.IsSelected = true; btnCloseCurtain.IsSelected = false; }); }) { IsBackground = true }.Start (); }; } //foreach (var common in room.DeviceList) { if (common.Type == DeviceType.CurtainRoller) { var curtainroller = common as CurtainRoller; EventHandler openCurtainControlPageEvent = (button, mouseEventArgs) => { var userCurtainPageView = new UserCurtainPage (curtainroller, room); UserMiddle.DevicePageView.AddChidren (userCurtainPageView); UserMiddle.DevicePageView.PageIndex = 2; userCurtainPageView.showCurtainsRoom (); }; var curtainView = new FrameLayout () { Height = Application.GetRealHeight (130), Tag = common.CommonLoopID.ToString() }; equipmentListScrolView.AddChidren (curtainView); curtainView.MouseUpEventHandler += openCurtainControlPageEvent; Button btnCurtainViewBottomNull = new Button () { Y = Application.GetRealHeight (127), Height = Application.GetRealHeight (3), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.MainColor, }; curtainView.AddChidren (btnCurtainViewBottomNull); //窗名 var tempDeviceName = new Button () { X = Application.GetRealWidth (30), Height = Application.GetRealHeight (60), TextAlignment = TextAlignment.CenterLeft, Text = room.Name + "-" + curtainroller.Name, TextColor = SkinStyle.Current.TextColor1, }; curtainView.AddChidren (tempDeviceName); tempDeviceName.MouseUpEventHandler += openCurtainControlPageEvent; Button btnCurtain = new Button () { X = Application.GetRealWidth (25), Y = Application.GetRealHeight (40), Width = Application.GetRealWidth (105), Height = Application.GetRealHeight (105), UnSelectedImagePath = "Curtain/rollerCurtain.png", //SelectedImagePath = "Item/RH_CurtainsSelected.png", }; curtainView.AddChidren (btnCurtain); btnCurtain.MouseUpEventHandler += openCurtainControlPageEvent; var btnOpenCurtain = new Button () { Width = Application.GetMinRealAverage (100), Height = Application.GetMinRealAverage (100), X = Application.GetRealWidth (280), Y = Application.GetRealHeight (35), UnSelectedImagePath = "Curtain/CurtainRollerUp.png", SelectedImagePath = "Curtain/CurtainRollerUpOn.png", Tag = "Open" }; curtainView.AddChidren (btnOpenCurtain); var btnStopCurtain = new Button () { Width = Application.GetMinRealAverage (100), Height = Application.GetMinRealAverage (100), X = Application.GetRealWidth (400), Y = Application.GetRealHeight (35), UnSelectedImagePath = "Curtain/CurtainTimeOut.png", SelectedImagePath = "Curtain/CurtainTimeOutSelected.png", Tag = "Stop" }; curtainView.AddChidren (btnStopCurtain); var btnCloseCurtain = new Button () { Width = Application.GetMinRealAverage (100), Height = Application.GetMinRealAverage (100), X = Application.GetRealWidth (520), Y = Application.GetRealHeight (35), UnSelectedImagePath = "Curtain/CurtainRollerDown.png", SelectedImagePath = "Curtain/CurtainRollerDownOn.png", Tag = "Close" }; curtainView.AddChidren (btnCloseCurtain); if (curtainroller.Status == CurtainStatus.Close) { btnCloseCurtain.IsSelected = true; } else { btnOpenCurtain.IsSelected = true; } btnCloseCurtain.MouseDownEventHandler += (sender3, e3) => { Control.ControlBytesSend (Command.UpdataCurtainModelStutas, curtainroller.SubnetID, curtainroller.DeviceID, new byte [] { 1, 2 }); (sender3 as Button).IsSelected = true; btnOpenCurtain.IsSelected = false; btnStopCurtain.IsSelected = false; }; btnOpenCurtain.MouseDownEventHandler += (sender3, e3) => { Control.ControlBytesSend (Command.UpdataCurtainModelStutas, curtainroller.SubnetID, curtainroller.DeviceID, new byte [] { 1, 1 }); (sender3 as Button).IsSelected = true; btnStopCurtain.IsSelected = false; btnCloseCurtain.IsSelected = false; }; btnStopCurtain.MouseDownEventHandler += (sender3, e3) => { Control.ControlBytesSend (Command.UpdataCurtainModelStutas, curtainroller.SubnetID, curtainroller.DeviceID, new byte [] { 1, 0 }); (sender3 as Button).IsSelected = true; btnOpenCurtain.IsSelected = false; btnCloseCurtain.IsSelected = false; new System.Threading.Thread (() => { System.Threading.Thread.Sleep (300); Application.RunOnMainThread (() => { (sender3 as Button).IsSelected = false; btnOpenCurtain.IsSelected = true; btnCloseCurtain.IsSelected = false; }); }) { IsBackground = true }.Start (); }; } //foreach (var common in room.DeviceList) { if (common.Type == DeviceType.CurtainTrietex) { var curtaintrietex = common as CurtainTrietex; EventHandler openCurtainControlPageEvent = (button, mouseEventArgs) => { var userCurtainPageView = new UserCurtainPage (curtaintrietex, room); UserMiddle.DevicePageView.AddChidren (userCurtainPageView); UserMiddle.DevicePageView.PageIndex = 2; userCurtainPageView.showCurtainsRoom (); }; var curtainView = new FrameLayout () { Height = Application.GetRealHeight (130), Tag = common.CommonLoopID.ToString() }; equipmentListScrolView.AddChidren (curtainView); curtainView.MouseUpEventHandler += openCurtainControlPageEvent; Button btnCurtainViewBottomNull = new Button () { Y = Application.GetRealHeight (127), Height = Application.GetRealHeight (3), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.MainColor, }; curtainView.AddChidren (btnCurtainViewBottomNull); //窗名 var tempDeviceName = new Button () { X = Application.GetRealWidth (30), Height = Application.GetRealHeight (60), TextAlignment = TextAlignment.CenterLeft, Text = room.Name + "-" + curtaintrietex.Name, TextColor = SkinStyle.Current.TextColor1, }; curtainView.AddChidren (tempDeviceName); Button btnCurtain = new Button () { X = Application.GetRealWidth (22), Y = Application.GetRealHeight (40), Width = Application.GetRealWidth (105), Height = Application.GetRealHeight (105), UnSelectedImagePath = "Curtain/curtain1.png", //SelectedImagePath = "Item/RH_CurtainsSelected.png", }; curtainView.AddChidren (btnCurtain); btnCurtain.MouseUpEventHandler += openCurtainControlPageEvent; var btnOpenCurtain = new Button () { Width = Application.GetMinRealAverage (100), Height = Application.GetMinRealAverage (100), X = Application.GetRealWidth (280), Y = Application.GetRealHeight (35), UnSelectedImagePath = "Curtain/CurtainOpen.png", SelectedImagePath = "Curtain/CurtainOpenSelected.png", Tag = "Open" }; curtainView.AddChidren (btnOpenCurtain); var btnStopCurtain = new Button () { Width = Application.GetMinRealAverage (100), Height = Application.GetMinRealAverage (100), X = Application.GetRealWidth (400), Y = Application.GetRealHeight (35), UnSelectedImagePath = "Curtain/CurtainTimeOut.png", SelectedImagePath = "Curtain/CurtainTimeOutSelected.png", Tag = "Stop" }; curtainView.AddChidren (btnStopCurtain); var btnCloseCurtain = new Button () { Width = Application.GetMinRealAverage (100), Height = Application.GetMinRealAverage (100), X = Application.GetRealWidth (520), Y = Application.GetRealHeight (35), UnSelectedImagePath = "Curtain/CurtainClose.png", SelectedImagePath = "Curtain/CurtainCloseSelected.png", Tag = "Close" }; curtainView.AddChidren (btnCloseCurtain); if (curtaintrietex.Status == CurtainStatus.Close) { btnCloseCurtain.IsSelected = true; } else { btnOpenCurtain.IsSelected = true; } btnCloseCurtain.MouseDownEventHandler += (sender3, e3) => { Control.ControlBytesSend (Command.UpdataCurtainModelStutas, curtaintrietex.SubnetID, curtaintrietex.DeviceID, new byte [] { 1, 2 }); (sender3 as Button).IsSelected = true; btnOpenCurtain.IsSelected = false; btnStopCurtain.IsSelected = false; }; btnOpenCurtain.MouseDownEventHandler += (sender3, e3) => { Control.ControlBytesSend (Command.UpdataCurtainModelStutas, curtaintrietex.SubnetID, curtaintrietex.DeviceID, new byte [] { 1, 1 }); (sender3 as Button).IsSelected = true; btnStopCurtain.IsSelected = false; btnCloseCurtain.IsSelected = false; }; btnStopCurtain.MouseDownEventHandler += (sender3, e3) => { Control.ControlBytesSend (Command.UpdataCurtainModelStutas, curtaintrietex.SubnetID, curtaintrietex.DeviceID, new byte [] { 1, 0 }); (sender3 as Button).IsSelected = true; btnOpenCurtain.IsSelected = false; btnCloseCurtain.IsSelected = false; new System.Threading.Thread (() => { System.Threading.Thread.Sleep (300); Application.RunOnMainThread (() => { (sender3 as Button).IsSelected = false; btnOpenCurtain.IsSelected = true; btnCloseCurtain.IsSelected = false; }); }) { IsBackground = true }.Start (); }; } } } #endregion curView = this; } /// /// 控制所有窗帘 /// /// 1:开,2:关. void controlAllCurtain (byte status) { System.Threading.Tasks.Task.Run (() => { foreach (var room in Room.Lists) { if (room == null) continue; if (string.IsNullOrEmpty(room.Name)) { continue; } foreach (var common in room.DeviceList) { if (common.Type == DeviceType.CurtainModel) { var curtainmodel = common as CurtainModel; Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, curtainmodel.SubnetID, curtainmodel.DeviceID, new byte [] { curtainmodel.LoopID, status }); } else if (common.Type == DeviceType.CurtainRoller) { var curtainroller = common as CurtainRoller; Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, curtainroller.SubnetID, curtainroller.DeviceID, new byte [] { curtainroller.LoopID, status }); } else if (common.Type == DeviceType.CurtainTrietex) { var curtaintrietex = common as CurtainTrietex; Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, curtaintrietex.SubnetID, curtaintrietex.DeviceID, new byte [] { curtaintrietex.LoopID, status }); } } } }); } /// /// 读取设备状态 /// static void readAllStatus () { System.Threading.Tasks.Task.Run (() => { System.Collections.Generic.List readList = new System.Collections.Generic.List (); foreach (Room room in Room.Lists) { var list = room.DeviceList.FindAll ((obj) => { return obj.LastUpdateTime.AddMinutes (Common.Time) <= DateTime.Now && (obj.Type == DeviceType.CurtainModel || obj.Type == DeviceType.CurtainRoller || obj.Type == DeviceType.CurtainTrietex); }); foreach (Common common in list) { var s = common.Type + "_" + common.SubnetID + "_" + common.DeviceID + "_" + common.LoopID; //已经读取过当前设备就不再读取 if (readList.Contains (s)) { continue; } if (common.Type == DeviceType.CurtainModel) { var curtainModel = common as CurtainModel; readList.Add (s); Control.ControlBytesSend (Command.ReadCurtainStatus, curtainModel.SubnetID, curtainModel.DeviceID, new byte [] { curtainModel.LoopID }); } if (common.Type == DeviceType.CurtainRoller) { var curtainroller = common as CurtainRoller; readList.Add (s); Control.ControlBytesSend (Command.ReadCurtainStatus, curtainroller.SubnetID, curtainroller.DeviceID, new byte [] { 17 }); } if (common.Type == DeviceType.CurtainTrietex) { var curtaintrietex = common as CurtainTrietex; readList.Add (s); Control.ControlBytesSend (Command.ReadCurtainStatus, curtaintrietex.SubnetID, curtaintrietex.DeviceID, new byte [] { 17 }); } } } }); } } }